package com.icss.train_sys_back.utils;

import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeParseException;

/**
 * 日期转换工具类
 */
public class DateUtil {

    private static final DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");

    /**
     * 将字符串转换为LocalDate
     * @param dateStr 日期字符串，格式为 yyyy-MM-dd
     * @return LocalDate对象，如果转换失败则返回null
     */
    public static LocalDate stringToLocalDate(String dateStr) {
        if (dateStr == null || dateStr.trim().isEmpty()) {
            return null;
        }

        try {
            return LocalDate.parse(dateStr, DATE_FORMATTER);
        } catch (DateTimeParseException e) {
            // 记录日志或处理异常
            return null;
        }
    }

    /**
     * 将字符串转换为LocalDate，提供默认值
     * @param dateStr 日期字符串
     * @param defaultDate 默认日期
     * @return LocalDate对象
     */
    public static LocalDate stringToLocalDate(String dateStr, LocalDate defaultDate) {
        LocalDate result = stringToLocalDate(dateStr);
        return result != null ? result : defaultDate;
    }

    /**
     * 验证日期范围是否有效（开始日期 <= 结束日期）
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 是否有效
     */
    public static boolean isDateRangeValid(LocalDate startDate, LocalDate endDate) {
        if (startDate == null || endDate == null) {
            return false;
        }
        return !startDate.isAfter(endDate);
    }

    /**
     * 自动修正日期范围（如果开始日期晚于结束日期，则交换）
     * @param startDate 开始日期
     * @param endDate 结束日期
     * @return 修正后的日期数组 [startDate, endDate]
     */
    public static LocalDate[] fixDateRange(LocalDate startDate, LocalDate endDate) {
        if (startDate != null && endDate != null && startDate.isAfter(endDate)) {
            // 交换日期
            return new LocalDate[]{endDate, startDate};
        }
        return new LocalDate[]{startDate, endDate};
    }
}

